- Опубликовано
Отличие interface и type в TypeScript
- Автор
- Имя
- Счастливый тимлид | ♥ Frontend
- Telegram
- Счастливый тимлид | ♥ Frontend2204 подписчика692 поста
🤔 В чём отличие interface и type в TypeScript на самом деле?
Этот вопрос часто задают на собеседованиях — и, что удивительно, большинство кандидатов и даже интервьюеров не знают главного различия.
──
✨ Базовые отличия:
1️⃣ interface с одинаковым именем склеивается (merge), но только в рамках одного контекста (scope).
type, наоборот, выдаст ошибку при попытке повторного объявления.
2️⃣ interface может наследовать другие интерфейсы, но и типы тоже может наследовать — только если эти типы имеют объектную форму и не содержат объединений (union),
а type объединяет и типы, и интерфейсы через пересечение (&).
3️⃣ interface описывает только объекты и функции,
а type может описывать любой тип, включая примитивы, объединения (|) и пересечения (&).
──
⚙️ Менее очевидные различия:
4️⃣ interface можно использовать с implements (в классах),
он также может описывать new().
type в implements работает ограниченно — описывать new() нельзя.
5️⃣ type поддерживает объединения (union), а interface — нет.
tstype Entity = | { type: 'user'; name: string } | { type: 'post'; title: string };
──
🔥 Самое важное различие:
6️⃣ interface — это статическая структура,
а type — динамическая.
В interface нельзя описать вычисляемые ключи,
он требует фиксированную структуру.
А type позволяет создавать динамические типы:
tstype User = { id: number; name: string }; type ReadonlyUser = { [K in keyof User]: User[K] };
✅ Это называется mapped type, и оно возможно только с type.
Если попытаться сделать то же самое через интерфейс:
tsinterface ReadonlyUser { [K in keyof User]: User[K]; // ❌ Ошибка }
TypeScript сообщит: "A mapped type may not declare properties or methods".
👇 А это разве не динамический interface?
tsinterface Dictionary { [key: string]: number; }
Нет, это не настоящая динамика, а просто маска для любых свойств — без вычислений и зависимостей от других типов.
Это называется index signature (индексная подпись) — способ сказать, что объект может содержать свойства с любыми строковыми именами определённого типа.
──
⚡️ Производительность:
7️⃣ Из-за вычислений type может компилироваться медленнее,
поскольку компилятору нужно разрешать больше зависимостей между типами.
──
✅ Итог:
▪️ interface — для описания структур и контрактов классов.
▪️ type — для гибких, вычисляемых и комбинированных типов.
──
👉 Сохраняй, чтобы не забыть и удивить любого интервьювера на собеседовании. 😁
#javascript #typescript #frontend
Предыдущий пост
- Опубликовано
Различия типов и интерфейсов в TypeScript
Следующий пост
- Опубликовано
Живите маленькие жизни
Закрепленные
Из подборки #frontend
- Опубликовано
Как сделать страницу с халявой и промокодами
- Опубликовано
Встречайте геймификацию в комментах
- Опубликовано
Когда проще завайбкодить чем нагуглить
- Опубликовано
Телеграмовский сосун (или какун, как правильно?)
- Опубликовано
Итоги
- Опубликовано
Поделитесь вашими любимыми мемами уходящего года
Свежие посты
- Опубликовано
Как сделать страницу с халявой и промокодами
- Опубликовано
Встречайте геймификацию в комментах
- Опубликовано
Когда проще завайбкодить чем нагуглить
- Опубликовано
весёлая дискуссия в канале Деплой о резюме
- Опубликовано
Жизнь по скраму
- Опубликовано
не забудь завести будильник
- Опубликовано
Каникулы в регионе без интернета
- Опубликовано




